//
//  YLStoreKitManager.swift
//  YLPaymentKit
//
//  Created by changhe on 2025/4/12.
//

import Foundation
import StoreKit

/// StoreKit管理器协议 - 定义统一接口
public protocol YLStoreKitManagerProtocol {
    /// 是否可用
    var isAvailable: Bool { get }
	
    /// 获取商品信息
    func fetchProducts(productIds: [String], completion: @escaping (Result<[Any], Error>) -> Void)
    
    /// 购买商品
    func purchase(productId: String, orderId: String, completion: @escaping (YLPaymentResult) -> Void)
    
    /// 恢复购买
    func restorePurchases(completion: @escaping (YLPaymentResult) -> Void)
    
	// 检查未完成交易的订单
	func checkUnfinishedTransactions(completHandler: (([YLTransactionInfo])-> Void)?)
		
    /// 完成交易
    func finishTransaction(_ transaction: Any)
	
}

/// StoreKit管理器
public class YLStoreKitManager: NSObject {
	
    // MARK: - 创建管理器
    
    /// 根据指定版本创建合适的StoreKit管理器
    public static func createManager(version: YLIAPVersion = .auto) -> YLStoreKitManagerProtocol {
        switch version {
        case .v1:
            // 强制使用StoreKit 1 API
            if #available(iOS 18.0, *) {
                print("提示：iOS 18+虽然支持StoreKit 1，但Apple建议使用StoreKit 2")
            }
			return YLStoreKitV1Manager()
            
        case .v2:
            // 强制使用StoreKit 2 API (但要求iOS 15.0+)
            if #available(iOS 15.0, *) {
                return YLStoreKitV2Manager()
            } else {
                print("警告：iOS 15.0以下不支持StoreKit 2，将返回StoreKit 1管理器")
                return YLStoreKitV1Manager()
            }
            
        case .auto:
            // 自动选择最佳API版本
            if #available(iOS 15.0, *) {
                return YLStoreKitV2Manager()
            } else {
                return YLStoreKitV1Manager()
            }
        }
    }
} 
